class Product(object):
    # 类属性可以理解为java中的静态变量
    # 这是一个类属性,在这里的业务含义是记录一共添加了多少个产品
    num = 0

    def __init__(self, name, price, product_no, stock):
        # 类的实例属性,可以理解为构造方法
        self.name = name
        self.price = price
        self.product_no = product_no
        self.stock = stock  # 库存
        # 假设每添加一个产品时,num加1
        Product.num = Product.num + 1

    # 定义一个卖出的实例方法
    def sell(self, num):
        print('出售产品:%s,当前库存:%s,出售个数:%s' % (self.name, self.stock, num))
        self.stock = self.stock - num

    # 定义一个类方法打印当前的商品数量
    @classmethod
    def print_num(cls):
        print('当前拥有的商品种类数量是%s' % cls.num)


# 实例方法与类方法的最大区别是,类方法不用创建对象也可以调用
# 调用类方法
Product.print_num()

p = Product('苹果', 12.89, 'P01', 10)
print(p.__dict__)

# 调用类方法
Product.print_num()

# 调用实例方法
p.sell(2)
print(p.__dict__)
